Este relatório, tem como objetivo analisar dados de commits no github. Utilizaremos uma amostra de dados da atividade global do github entre o período de 01/2016 e 05/2017. As linguagens que vamos analisar serão java e javascript.
Primeiro, será feita a importação dos dados já com as linguagens de interesse filtradas.
dados_github = read_csv(here("data/github-users-committing-filetypes.csv"),
progress = FALSE,
col_types = cols(file_extension = col_character(),
month_day = col_integer(),
the_month = col_integer(),
the_year = col_integer(),
users = col_integer())) %>%
filter(file_extension %in% c("java", "js"))
dados_github = dados_github %>%
mutate(date = paste(the_year, the_month, month_day, sep='-') %>% as.Date(.))
dados_github$weekday = weekdays(as.Date(dados_github$date))
dados_github = dados_github %>%
mutate(is_weekend = ifelse(weekday %in% c("sábado", "domingo"),TRUE, FALSE))
dados_java = dados_github %>%
filter(file_extension == "java")
dados_js = dados_github %>%
filter(file_extension == "js")
Antes de responder algumas perguntas, vamos dar uma olhada na linha do tempo das duas linguagens.
p =
dados_github %>%
filter(the_year == "2016") %>%
ggplot(aes(x=the_month,
y=users,
text = paste("Mês:",the_month,
"\nQuantidade de Usuários:",
users))) +
labs(y = "Quantidade de usuários", x = "Mês")+
theme(legend.position="none") +
geom_boxplot(colour = "#800000") + facet_wrap( ~ file_extension)
ggplotly(p, tooltip = "text")
rm(p)
p =
dados_github %>%
filter(the_year == "2017") %>%
ggplot(aes(x=the_month,
y=users,
text = paste("Mês:",the_month,
"\nQuantidade de Usuários:",
users))) +
labs(y = "Quantidade de usuários", x = "Mês")+
theme(legend.position="none") +
geom_boxplot(colour = "#003366") + facet_wrap( ~ file_extension)
ggplotly(p, tooltip = "text")
rm(p)
Observando os dois boxplots, verificamos que há valores discrepantes, por esse motivo, iremos utilizar a mediana nos nossos experimentos.
Para respondermos essa pergunta, precimas aplicar algumas técnicas de estatística. Primeiro, vamos utilizar o método de reamostragem chamado bootstrapping, ele é utilizado para aproximar distribuição na amostra de um levantamento estatístico. Após a aplicação desse método, o Intervalo de Confiança será calculado e assim poderemos inferir o resultado da amostra para toda a população.
amostra_semana <- dados_java %>% filter(is_weekend == "FALSE") %>% sample_n(70)
amostra_semana <- rename(amostra_semana,users_semana = users)
amostra_fim_de_semana <- dados_java %>% filter(is_weekend == "TRUE") %>% sample_n(70)
amostra_fim_de_semana <- rename(amostra_fim_de_semana,users_fim_de_semana = users)
b <- bootstrap(amostra_semana, median(users_semana))
mediana_g1 <- CI.bca(b, probs = c(.05, .95))
mediana_g1
## 5% 95%
## median(users_semana) 3471.181 3708
b <- bootstrap(amostra_fim_de_semana, median(users_fim_de_semana))
mediana_g2 <- CI.bca(b, probs = c(.05, .95))
mediana_g2
## 5% 95%
## median(users_fim_de_semana) 1971 2143
rm (amostra_fim_de_semana)
rm(amostra_semana)
rm(b)
Aqui, iremos utilizar uma confiança de 95% para verificar os diferentes intervalos:
df <- data.frame(rbind(mediana_g1,
mediana_g2))
df$medida = row.names(df)
df %>%
ggplot(aes(x = medida, ymin = X5., ymax = X95.)) +
geom_errorbar(width = .2)
rm (df)
Há claramente uma diferença entre a popularidade durante a semana e o fim de semana, os intervalos não se interceptaram e estão distantes.
amostra_semana <- dados_js %>% filter(is_weekend == "FALSE") %>% sample_n(70)
amostra_semana <- rename(amostra_semana,users_semana = users)
amostra_fim_de_semana <- dados_js %>% filter(is_weekend == "TRUE") %>% sample_n(70)
amostra_fim_de_semana <- rename(amostra_fim_de_semana,users_fim_de_semana = users)
b <- bootstrap(amostra_semana, median(users_semana))
mediana_g1 <- CI.bca(b, probs = c(.05, .95))
mediana_g1
## 5% 95%
## median(users_semana) 7101.5 7441
b <- bootstrap(amostra_fim_de_semana, median(users_fim_de_semana))
mediana_g2 <- CI.bca(b, probs = c(.05, .95))
mediana_g2
## 5% 95%
## median(users_fim_de_semana) 4105.5 4431.5
rm (amostra_fim_de_semana)
rm(amostra_semana)
rm(b)
Iremos utilizar o mesmo nível de confiança do experimento anterior (95%):
df <- data.frame(rbind(mediana_g1,
mediana_g2))
df$medida = row.names(df)
df %>%
ggplot(aes(x = medida, ymin = X5., ymax = X95.)) +
geom_errorbar(width = .2)
rm(df)
Os resultados são iguais os do experimento com a linguagem Java, apenas diferindo na quantidade de usuários, ou seja, durante o período de fim de semana a popularidade é menor.
Utilizaremos a mediana e a técnica do bootstrapping para responder essa pergunta. O nível de confiança utilizado será 95%.
amostra_java <- dados_java %>% filter(is_weekend == "TRUE") %>% sample_n(70)
amostra_java <- rename(dados_java,users_java = users)
amostra_js <- dados_js %>% filter(is_weekend == "TRUE") %>% sample_n(70)
amostra_js <- rename(dados_js,users_js = users)
b <- bootstrap(amostra_java, median(users_java))
media_java <- CI.bca(b, probs = c(.05, .95))
media_java
## 5% 95%
## median(users_java) 3338 3441.5
b <- bootstrap(amostra_js, median(users_js))
media_js <- CI.bca(b, probs = c(.05, .95))
media_js
## 5% 95%
## median(users_js) 6648 6865
rm (amostra_java)
rm(amostra_js)
rm(b)
Vamos gerar o gráfico dos intervalos de confiança:
df <- data.frame(rbind(media_java,
media_js))
df$medida = row.names(df)
df %>%
ggplot(aes(x = medida, ymin = X5., ymax = X95.)) +
geom_errorbar(width = .05)
rm(df)
Mais uma vez, os intervalos estão distantes um do outro, mostrando que existe uma diferença significativa entre os usuários das duas linguagens durante o fim de semana.